查看原文
其他

【新开源报道 24】美团点评开源MySQL闪回工具 —— MyFlash

2017-11-26 开源最前线
开源最前线(ID:OpenSourceTop) 猿妹 整编

综合自:美团点评技术团队、GitHub等


MyFlash 是由美团点评公司技术工程部开发维护且内部使用的一个回滚 DML 操作的工具,旨在方便且高效地进行数据恢复,已于近日宣布开源。该工具通过解析 v4 版本的 binlog ,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。


MySQL 极速闪回工具 MyFlash


授权协议:未知

开发语言:C/C++

操作系统:跨平台

开发厂商:美团

Github:https://github.com/Meituan-Dianping/MyFlash


闪回工具现状


开发团队也在其博客上将 MyFlash 与市面上现有的闪回工具进行了对比。目前市面上已有的恢复工具,从实现角度把可划分成如下几类。


① mysqlbinlog 工具配合 sed、awk 。该方式先将 binlog 解析成类 SQL 的文本,然后使用 sed、awk 把类 SQL 文本转换成真正的 SQL 。


优点:当 SQL 中字段类型比较简单时,可以快速生成需要的 SQL ,且编程门槛也比较低。


缺点:当 SQL 中字段类型比较复杂时,尤其是字段中的文本包含 HTML 代码,用 awk、sed 等工具时,就需要考虑极其复杂的转义等情况,出错概率很大。


② 给数据库源码打 patch 。该方式扩展了 mysqlbinlog 的功能,增加 Flashback 选项。


优点:复用了 MySQL Server 层中 binlog 解析等代码,一旦稳定之后,无须关心复杂的字段类型,且效率较高。


缺点:在修改前,需要对 MySQL 的复制代码结构和细节需要较深的了解。版本比较敏感,在 MySQL 5.6 上做的 patch ,基本不能用于 MySQL 5.7 的回滚操作。升级困难,因为 patch 的代码是分布在 MySQL 的各个文件和函数中,一旦 MySQL 代码改变,特别是复制层的重构,升级的难度不亚于完全重新写一个。


③ 使用业界提供的解析 binlog 的库,然后进行 SQL 构造,其优秀代表是 binlog2sql 。


优点:使用业界成熟的库,因此稳定性较好,且上手难度较低。


缺点:效率往往较低,且实现上受制于 binlog 库提供的功能。


上述几种实现方式,主要是提供的过滤选项较少,比如不能提供基于 SQL 类型的过滤,需要回滚一个 delete 语句,导致在回滚时,需要结合 awk、sed 等工具进行筛选。


总结了上述几种工具的优缺点,理想的闪回工具应具有以下特性:

● 无需把 binlog 解析成文本,再进行转换。

● 提供原生的基于库、表、SQL 类型、位置、时间等多种过滤方式。

● 支持 MySQL 多个版本。

● 对于数据库的代码重构不敏感,利于升级。

● 自主掌控 binlog 解析,提供尽可能灵活的方式。

● MyFlash 应运而生。



MyFlash 限制


● binlog格式必须为row,且binlog_row_image=full

● 仅支持5.6与5.7

● 只能回滚DML(增、删、改)



FAQ


支持gtid吗?

答:支持。请参考:https://github.com/Meituan-Dianping/MyFlash/blob/master/doc/how_to_use.md


在开启gtid的MySQL server上,应用flashback报错,错误为:ERROR 1782 (HY000) at line 16: @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON. ?

答:在导入时加入--skip-gtids mysqlbinlog --skip-gtids | mysql -uxxx -pxxx


如果回滚后的binlog日志尺寸超过20M,在导入时,很耗时。如何处理?

答:参考https://github.com/Meituan-Dianping/MyFlash/blob/master/doc/how_to_use.md,搜索maxSplitSize。使用该参数可以对文件进行切片


附:新开源报道汇总

《【新开源报道 23】IBM 推出首套开源现代化字体 —— IBM Plex》

《【新开源报道 22】Microsoft 开源用于 VS Code 的 Java Debugger》

《【新开源报道 21】阿里开源容器技术Pouch和P2P文件分发系统“蜻蜓”》

《【新开源报道 20】Uber正式开源其分布式跟踪系统Jaeger》

《【新开源报道 19】Uber与斯坦福大学开源深度概率编程语言Pyro》

《【新开源报道 18】谷歌开放内部工具 Colaboratory 来协助 AI 开发》

《【新开源报道 17】这波开源满分!清华大学开源网络嵌入的工具包 —— OpenNE

《【新开源报道 16】AI开发者福音!微软亚马逊联合发布深度学习库 Gloun》

《【新开源报道 15】谷歌发布量子开源软件,量子计算机对科学家免费开放 》

《【新开元报道 14】微软开源用于Spark的深度学习库MMLSpark》

《【新开源报道 13】Facebook 开源帮助开发者消灭最顽固的软件 bug 的工具》

《【新开源报道 12】不只是阿里巴巴的操作系统,AliOS 宣布开源》

《【新开源报道 11】重磅!阿里巴巴正式开源全球化OpenMessaging和ApsaraCache项目》

《【新开源报道 10】IBM 和谷歌等巨头联手为开发者推出开源容器安全工具Grafeas》

《【新开源报道 9】Google开源Abseil,为C++和Python开发提供支持》

《【新开源报道 8】serverless 领域的福音!Oracle 宣布开源 Fn project》

《【新开源报道 7】苹果在 GitHub 上公布 macOS 和 iOS 内核源码》

《【新开源报道 6】百度开源移动端深度学习框架mobile-deep-learning(MDL)》

《【新开源报道 5】百度正式开源其 RPC 框架 brpc》

《【新开源报道 4】IBM 开源动态的应用服务器运行时环境 Open Liberty》

《【新开源报道 3】微信后台团队最近开源力作:PhxQueue分布式队列》

《【新开源报道 2】喜大普奔!阿里即将开源 ApsaraCache,云数据库 Redis 版分支》

【新开源报道 1】腾讯 Web UI 解决方案 QMUI Web 正式回迁开源》



●本文编号94,以后想阅读这篇文章直接输入94即可

●输入m获取文章目录

↓↓↓ 点击"阅读原文" 进入GitHub详情页 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存